package com.work.demo.test;

import com.google.common.collect.ObjectArrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;

/**
 * base 错误code 接口
 *
 * @author yedu
 */
public interface BaseError {

    /**
     * 错误msg
     *
     * @return msg
     */
    String getMsg();

    /**
     * 错误code
     *
     * @return code
     */
    Integer getCode();

    /** 枚举自检，不允许 code 重复 */
    static void selfCheck() {
        Set<Integer> codes = new HashSet<>();

        BaseError[] errors = ObjectArrays.concat(GlobalError.values(), BizError.values(), BaseError.class);
        Stream.of(errors).forEach(e -> {
                if (!codes.add(e.getCode())) {
                    String msg = String.format("Duplicate error code %d found: %s.%s", e.getCode(), e.getClass().getSimpleName(), e);
                    throw new IllegalStateException(msg);
                }
        });
    }

}